package com.monkey.springbootvue.repository;

// 引入项目中定义的Book实体类，这个实体类对应数据库中的表结构，包含了书籍相关的属性信息，如id、name、author等
import com.monkey.springbootvue.entity.Book;
// 导入Spring Data JPA中的JpaRepository接口，它提供了一系列用于操作数据库的通用方法，比如常见的增删改查（CRUD）操作等
import org.springframework.data.jpa.repository.JpaRepository;

// 定义一个名为BookRepository的接口，它继承自JpaRepository接口
// 通过这种继承关系，BookRepository接口会自动继承JpaRepository中定义的大量通用的数据库操作方法
// 这里指定了两个类型参数，第一个参数Book表示这个接口操作的实体类型是Book类对应的实体，第二个参数Integer表示对应的实体主键的类型是整数类型（因为Book实体中主键id的类型是Integer）
public interface BookRepository extends JpaRepository<Book, Integer> {

    // 这个接口本身没有额外定义新的方法，但由于继承了JpaRepository，它已经具备了很多有用的方法，例如：
    // 1. save(T entity)方法：既可以用于保存新的实体对象到数据库（当主键不存在时，如新增一本书的记录），也可以用于更新已存在的实体对象（根据主键判断，如修改一本书的信息）。
    // 2. findById(ID id)方法：根据传入的主键值（这里是整数类型的id）查找对应的实体对象，返回值是Optional<Book>类型，方便处理可能不存在对应实体的情况。
    // 3. findAll()方法：查询并返回所有的Book实体对象列表。
    // 4. deleteById(ID id)方法：根据传入的主键值删除对应的实体记录，也就是从数据库中删除对应的那本书的记录。
    // 还有很多其他诸如分页查询、排序查询等相关的通用方法，都可以直接使用，极大地简化了与数据库交互的代码编写工作。

}